#pragma once

#include <utils/Concepts.h>
#include <algorithm/shared/utils/Vec3.h>

// Base header for calculating focus center from a heliostat to a receiver

namespace solar
{
    template <typename T1, typename T2> auto focusCenter(T1*, T2*) -> Vec3
    {
        static_assert(false, "Don't use this generic **unimplemented** version, include the "
                             "corresponding header for detailed implementation");
    }

    template <typename T1, typename T2>
    auto focusCenter(T1* src, T2* dst) -> Vec3
        requires(ClassWithFocusCenterAt<T1, T2>)
    {
        return src->focusCenterAt(dst);
    }

} // namespace solar
